package com.quanquan.user.service.weixin;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.quanquan.user.entity.TemplateId;
import com.quanquan.user.entity.User;
import com.quanquan.user.repository.TemplateIdRepository;
import com.quanquan.user.service.UserService;
import com.quanquan.user.service.weixin.miniTemplate.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import utils.DateUtils;
import utils.Request;
import utils.StringUtils;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName:小程序消息推送
 * @Description:TODO
 * @Author:xiongjunbao
 * @Date:2019/11/14 16:23
 * @Version 1.0
 */
@Service
public class MiniProgramProxy {

    private final UserService userService;
    private final TemplateIdRepository templateIdRepository;

    @Autowired
    public MiniProgramProxy(UserService userService, TemplateIdRepository templateIdRepository) {
        this.userService = userService;
        this.templateIdRepository = templateIdRepository;
    }


    /**
     *
     * 订阅消息（报名成功通知，这个在报名成功后弹出授权提醒）
     */
    public boolean sendSignUpActivityMessage(String userId, String activityName, String activityTime,String activityType,String couponName,
                                             String address) {
        TemplateMsg wechatTemplateMsg = new TemplateMsg();
        // 填充用户openid
        User user = userService.getUserById(userId);
        if (user != null && StringUtils.isNotEmpty(user.getOpenid())) {
            wechatTemplateMsg.setToUser(user.getOpenid());
        } else {
            return false;
        }
        wechatTemplateMsg.setTemplateId("IYci175CuuHO86zEppwmNRfkUihENvOvqDiitG_3zT0");
        // 填充模板推送后要跳转的页面
        TemplateId templatePage = templateIdRepository.findByType(4).get(0);
        if (templatePage != null) {
            wechatTemplateMsg.setPage(templatePage.getPage());
        } else {
            wechatTemplateMsg.setPage(null);
        }
        Map<String, TemplateData> templateDatas = new HashMap<String, TemplateData>();
        templateDatas.put("thing1", new TemplateData(activityName));
        templateDatas.put("date2", new TemplateData(activityTime));
        templateDatas.put("thing4", new TemplateData(activityType));
        templateDatas.put("thing8", new TemplateData(address));
        templateDatas.put("thing9", new TemplateData(couponName));
        wechatTemplateMsg.setTemplateData(templateDatas);
        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(wechatTemplateMsg.getTemplateData()));
        String result = sendWechatMsgToUser(wechatTemplateMsg.getToUser(), wechatTemplateMsg.getTemplateId(),
                wechatTemplateMsg.getPage(), jsonObject);
        if (!result.equals("")) {
            JSONObject object = JSON.parseObject(result);
            if (object.getInteger("errcode") == 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     *
     * 订阅消息（会员积分变动）
     */
    public boolean sendIntegralChangeMessage(String userId,String integral,String reason) {
        TemplateMsg wechatTemplateMsg = new TemplateMsg();
        // 填充用户openid
        User user = userService.getUserById(userId);
        if (user != null && StringUtils.isNotEmpty(user.getOpenid())) {
            wechatTemplateMsg.setToUser(user.getOpenid());
        } else {
            return false;
        }
        wechatTemplateMsg.setTemplateId("_zrTk3YdwHmrIa5zqGaMKgSUsvZYw7NQ04T_mFw22Nc");
        // 填充模板推送后要跳转的页面
        TemplateId templatePage = templateIdRepository.findByType(2).get(0);
        if (templatePage != null) {
            wechatTemplateMsg.setPage(templatePage.getPage());
        } else {
            wechatTemplateMsg.setPage(null);
        }
        Map<String, TemplateData> templateDatas = new HashMap<String, TemplateData>();
        templateDatas.put("date1", new TemplateData(DateUtils.currentDate()));
        templateDatas.put("amount3", new TemplateData("0"));
        templateDatas.put("character_string4", new TemplateData(integral));
        templateDatas.put("amount5", new TemplateData(user.getIntegral().toString()));
        templateDatas.put("thing6", new TemplateData(reason));
        wechatTemplateMsg.setTemplateData(templateDatas);
        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(wechatTemplateMsg.getTemplateData()));
        String result = sendWechatMsgToUser(wechatTemplateMsg.getToUser(), wechatTemplateMsg.getTemplateId(),
                wechatTemplateMsg.getPage(), jsonObject);
        if (!result.equals("")) {
            JSONObject object = JSON.parseObject(result);
            if (object.getInteger("errcode") == 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     *
     * 订阅消息（注册成功）
     */
    public boolean sendRegMessage(String userId) {
        TemplateMsg wechatTemplateMsg = new TemplateMsg();
        // 填充用户openid
        User user = userService.getUserById(userId);
        if (user != null && StringUtils.isNotEmpty(user.getOpenid())) {
            wechatTemplateMsg.setToUser(user.getOpenid());
        } else {
            return false;
        }
        wechatTemplateMsg.setTemplateId("y7pItCT3BVZ3iud-qL0Hrr-xDlK7nM3mXSy0RCSYnEU");
        // 填充模板推送后要跳转的页面
        TemplateId templatePage = templateIdRepository.findByType(1).get(0);
        if (templatePage != null) {
            wechatTemplateMsg.setPage(templatePage.getPage());
        } else {
            wechatTemplateMsg.setPage(null);
        }
        Map<String, TemplateData> templateDatas = new HashMap<String, TemplateData>();
        templateDatas.put("thing1", new TemplateData(user.getMemberName()));
        templateDatas.put("phone_number3", new TemplateData(user.getPhone()));
        templateDatas.put("time4", new TemplateData(user.getCreateTime()));
        templateDatas.put("phrase5", new TemplateData("注册成功"));
        wechatTemplateMsg.setTemplateData(templateDatas);
        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(wechatTemplateMsg.getTemplateData()));
        String result = sendWechatMsgToUser(wechatTemplateMsg.getToUser(), wechatTemplateMsg.getTemplateId(),
                wechatTemplateMsg.getPage(), jsonObject);
        if (!result.equals("")) {
            JSONObject object = JSON.parseObject(result);
            if (object.getInteger("errcode") == 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     *
     * 订阅消息（停车支付）
     */
    public boolean sendParkingFeeMessage(String userId, String fee) {
        TemplateMsg wechatTemplateMsg = new TemplateMsg();
        // 填充用户openid
        User user = userService.getUserById(userId);
        if (user != null && StringUtils.isNotEmpty(user.getOpenid())) {
            wechatTemplateMsg.setToUser(user.getOpenid());
        } else {
            return false;
        }
        wechatTemplateMsg.setTemplateId("Ukk2lvELEUPWo3kE8g1WagleJBR4IWH2Xy9aCGyzs90");
        // 填充模板推送后要跳转的页面
        TemplateId templateId = templateIdRepository.findByType(3).get(0);
        if (templateId != null) {
            wechatTemplateMsg.setPage(templateId.getTemplateId());
        } else {
            wechatTemplateMsg.setPage(null);
        }
        Map<String, TemplateData> templateDatas = new HashMap<String, TemplateData>();
        templateDatas.put("thing1", new TemplateData("小程序停车"));
        templateDatas.put("amount", new TemplateData(fee));
        templateDatas.put("thing3", new TemplateData("车费支付成功"));
        wechatTemplateMsg.setTemplateData(templateDatas);
        JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(wechatTemplateMsg.getTemplateData()));
        String result = sendWechatMsgToUser(wechatTemplateMsg.getToUser(), wechatTemplateMsg.getTemplateId(),
                wechatTemplateMsg.getPage(), jsonObject);
        if (!result.equals("")) {
            JSONObject object = JSON.parseObject(result);
            if (object.getInteger("errcode") == 0) {
                return true;
            } else {
                return false;
            }
        } else {
            return false;
        }
    }

    /**
     * 发送消息(模板消息)
     *
     * @param touser
     *            用户 OpenID
     * @param templatId
     *            模板消息ID
     * @param page
     *            URL置空，则在发送后，点击模板消息会进入一个空白页面（ios），或无法点击（android）。
     * @param data
     *            详细内容
     * @return
     */
    public String sendWechatMsgToUser(String touser, String templatId, String page, JSONObject data) {
        String token = userService.getWeChatToken();
        // String token =
        // "28_otUNiFSGz6xB-hHWq6n9Pa23ltdxTh8mfNonCpUaJuxzX1JhdzH6sL1qgHPigZ20DST3SVXShYZCO7dEbLAW-Oxqv_67XyAAhrY_R0l-tdZEPerGoc7HGtlm3nR2DUePHjGSZt_Mz6ap6x5cYEFfAJAOUV";
        if (null == token) {
            return "accessToken不合法";
        } else {
            String tmpurl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=" + token;
            JSONObject json = new JSONObject();
            json.put("touser", touser);
            json.put("template_id", templatId);
            json.put("page", page);
            json.put("data", data);
            String result = "";
            try {
                result = Request.postJson(tmpurl, json);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return result;
        }
    }

}
